home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 33 / Amiga Format AFCD33 (Issue 117, Dec 1998).iso / -seriously_amiga- / graphics / splitmpegppc / src / stream.h < prev    next >
Text File  |  1998-09-07  |  5KB  |  148 lines

  1. /*
  2.  * Copyright (c) 1994 Michael Simmons.
  3.  * All rights reserved.
  4.  * 
  5.  * Permission to use, copy, modify, and distribute this software and its
  6.  * documentation for any purpose, without fee, and without written agreement is
  7.  * hereby granted, provided that the above copyright notice and the following
  8.  * two paragraphs appear in all copies of this software.
  9.  * 
  10.  * IN NO EVENT SHALL MICHAEL SIMMONS BE LIABLE TO ANY PARTY FOR
  11.  * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
  12.  * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF MICHAEL SIMMONS
  13.  * HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  14.  * 
  15.  * THE MICHAEL SIMMONS SPECIFICALLY DISCLAIMS ANY WARRANTIES,
  16.  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
  17.  * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
  18.  * ON AN "AS IS" BASIS, AND MICHAEL SIMMONS HAS NO OBLIGATION TO
  19.  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
  20.  *
  21.  * I can be contacted via 
  22.  * Email: michael@ecel.uwa.edu.au
  23.  * Post: P.O. Box 506, NEDLANDS WA 6009, AUSTRALIA
  24.  *
  25.  * Amigaversion by Tobias Seiler in 1997
  26.  * Email: tabs@blader.com
  27.  */
  28.  
  29. /* MPEG Stream Constants */
  30.  
  31. /* Start codes. */
  32.  
  33. #define PICTURE_START_CODE       0x00000100
  34. #define SLICE_MIN_START_CODE     0x00000101
  35. #define SLICE_MAX_START_CODE     0x000001af
  36. #define RESERVED_START_CODE_1    0x000001b0
  37. #define RESERVED_START_CODE_2    0x000001b1
  38. #define USER_START_CODE          0x000001b2
  39. #define SEQ_START_CODE           0x000001b3
  40. #define EXT_START_CODE           0x000001b5
  41. #define RESERVED_START_CODE_3    0x000001b6
  42. #define SEQ_END_CODE             0x000001b7
  43. #define GOP_START_CODE           0x000001b8
  44. #define ISO_11172_END_CODE       0x000001b9
  45. #define PACK_START_CODE          0x000001ba
  46. #define SYSTEM_HEADER_START_CODE 0x000001bb
  47. #define RESERVED_STREAM          0x000001bc
  48. #define PRIVATE_STREAM_1         0x000001bd
  49. #define PADDING_STREAM           0x000001be
  50. #define PRIVATE_STREAM_2         0x000001bf
  51. #define AUDIO_STREAM_0           0x000001c0
  52. #define AUDIO_STREAM_31          0x000001df
  53. #define VIDIO_STREAM_0           0x000001e0
  54. #define VIDIO_STREAM_15          0x000001ef
  55. #define RESERVED_DATA_STREAM_0   0x000001f0
  56. #define RESERVED_DATA_STREAM_15  0x000001ff
  57.  
  58. /* other stuff */
  59. #define MAX_NUM_STREAMS  43
  60.  
  61. /* Picture_coding_type */
  62.  
  63. #define I_TYPE  1
  64. #define P_TYPE  2
  65. #define B_TYPE  3
  66. #define D_TYPE  4
  67.  
  68. /* Macros used with macroblock address decoding. */
  69.  
  70. #define MB_STUFFING  34
  71. #define MB_ESCAPE    35
  72.  
  73. /* Special values for DCT Coefficients */
  74. #define END_OF_BLOCK  62
  75. #define ESCAPE        61
  76.  
  77. /* Audio */
  78.  
  79. #define AUDIO_HEADER_SYNC  0xfff
  80.  
  81. #define LAYER_I        3
  82. #define LAYER_II       2
  83. #define LAYER_III      1
  84. #define LAYER_RESERVED 0
  85.  
  86. #define SAMPLE_FREQ_44        0
  87. #define SAMPLE_FREQ_48        1
  88. #define SAMPLE_FREQ_32        2
  89. #define SAMPLE_FREQ_RESERVED    3
  90.  
  91. #define MODE_STEREO         0
  92. #define MODE_JOINT_STEREO   1
  93. #define MODE_DUAL_CHANNEL   2
  94. #define MODE_SINGLE_CHANNEL 3
  95.  
  96. #define EMPHASIS_NONE       0
  97. #define EMPHASIS_50_15      1
  98. #define EMPHASIS_RESERVED   2
  99. #define EMPHASIS_CCITTJ17   3
  100.  
  101. typedef struct {
  102.     FILE            *stream;
  103.     unsigned int    STD_scale;        /*  1 bit  */
  104.     unsigned int    STD_size;        /* 13 bits */
  105.     unsigned int    PTS_hibit;        /*  1 bit  */
  106.     unsigned int    PTS;            /* 32 bits */
  107.     unsigned int    DTS_hibit;        /*  1 bit  */
  108.     unsigned int    DTS;            /* 32 bits */
  109. } StreamInfo;
  110.  
  111. typedef struct {
  112.     unsigned int    SCR_hibit;        /*  1 bit  */
  113.     unsigned int    SCR;            /* 32 bits */
  114.     unsigned int    mux_rate;        /* 22 bits */
  115. } Pack_Header;
  116.  
  117. typedef struct {
  118.     unsigned int    header_length;    /* 16 bits  */
  119.     unsigned int    rate_bound;        /* 22 bits  */
  120.     unsigned int    audio_bound;    /*  6 bits  */
  121.     unsigned int    fixed_flag;        /*  1 bit   */
  122.     unsigned int    CSPS_flag;        /*  1 bit   */
  123.     unsigned int    audio_lock_flag;/*  1 bit   */
  124.     unsigned int    video_lock_flag;/*  1 bit   */
  125.     unsigned int    video_bound;    /*  5 bits  */
  126.     unsigned int    reserved_byte;    /*  8 bits  */
  127.     unsigned int    STD_flag[MAX_NUM_STREAMS];
  128.     unsigned int    STD_scale_bound[MAX_NUM_STREAMS];
  129.     unsigned int    STD_size_bound[MAX_NUM_STREAMS];
  130. } System_Header;
  131.  
  132. typedef struct {
  133.     unsigned int    stream_id;        /*  8 bits  */
  134.     unsigned int    packet_length;    /* 16 bits  */
  135.     unsigned int    STD_flag;        /*  1 bit   */
  136.     unsigned int    STD_scale;        /*  1 bit   */
  137.     unsigned int    STD_size;        /* 13 bits  */
  138.     unsigned int    PTS_Flag;        /*  1 bit   */
  139.     unsigned int    PTS_hibit;        /*  1 bit   */
  140.     unsigned int    PTS;            /* 32 bits  */
  141.     unsigned int    DTS_Flag;        /*  1 bit    */
  142.     unsigned int    DTS_hibit;        /*  1 bit   */
  143.     unsigned int    DTS;            /* 32 bits  */
  144.     unsigned int    buffer_size;
  145.     char            *buffer;
  146. } Packet;
  147.  
  148.